﻿#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//int main()
//{
//	FILE* pfread = fopen("data.txt", "r");
//	if (pfread == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	FILE* pfwrite = fopen("data_open.txt", "w");
//	if (pfwrite == NULL)
//	{
//		perror("fopen");
//		fclose(pfread);
//		return 1;
//	}
//
//	int ch = fgetc(pfread);
//	while (ch != EOF)
//	{
//		fputc(ch, pfwrite);
//		ch = fgetc(pfread);
//	}
//
//	fclose(pfread);
//	pfread = NULL;
//	fclose(pfwrite);
//	pfwrite = NULL;
//	return 0;
//}

//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");
//	fwrite(&a, sizeof(int), 1, pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//struct _iobuf {
//	char* _ptr;
//	int _cnt;
//	char* _base;
//	int _flag;
//	int _file;
//	int _charbuf;
//	int _bufsiz;
//	char* _tmpfname;
//};
//typedef struct _iobuf FILE;

////打开⽂件
//FILE* fopen(const char* filename, const char* mode);
////关闭⽂件
//int fclose(FILE* stream);

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	fputs("hello world", pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "r");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c", ch);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	const char* str = "yuecheng";
//	for (int i = 0; str[i] != '\0'; i++)
//	{
//		fputc(str[i], pf);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	const char* str1 = "yuecheng";
//	const char* str2 = "boke";
//	fputs(str1, pf);
//	fputs("\n", pf);
//	fputs(str2, pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "r");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	char buff[500] = { 0 };
//	fgets(buff, sizeof(buff), pf);
//	printf("%s", buff);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	fprintf(pf, "%-10s %-15s %s\n", "ID", "Name", "Score");
//	fprintf(pf, "-------------------------------------------------\n");
//	fprintf(pf, "%-10d %-15s %6.2f\n", 1, "Bob", 85.5);
//	fprintf(pf, "%-10d %-15s %6.2f\n", 2, "Alice", 92.3);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "r");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	char ch1[10] = { 0 };
//	char ch2[10] = { 0 };
//	char ch3[10] = { 0 };
//	fscanf(pf, "%s %s %s\n", ch1, ch2, ch3);
//	printf("%s %s %s", ch1, ch2, ch3);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//struct stu {
//	char name[20];
//	int ID;
//	int age;
//};
//
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "wb");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	struct stu stu1 = { "zhangsan",20240523,18 };
//	//写文件
//	fwrite(&stu1, sizeof(stu1), 1, pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//struct stu {
//	char name[20];
//	int ID;
//	int age;
//};
//
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test1.txt", "rb");
//
//	//如果打开失败，结束程序
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	struct stu stu2 = { 0 };
//	//读文件
//	fread(&stu2, sizeof(stu2), 1, pf);
//	printf("%s %d %d", stu2.name, stu2.ID, stu2.age);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


int main()
{
	FILE* pFile;
	pFile = fopen("example.txt", "wb");
	fputs("This is an apple.", pFile);
	fseek(pFile, 9, SEEK_SET);
	fputs(" sam", pFile);
	fclose(pFile);
	return 0;
}

//int main()
//{
//	FILE* pFile;
//	long size;
//	pFile = fopen("myfile.txt", "rb");
//	if (pFile == NULL)
//		perror("Error opening file");
//	else
//	{
//		fseek(pFile, 0, SEEK_END); // non-portable
//		size = ftell(pFile);
//		fclose(pFile);
//		printf("Size of myfile.txt: %ld bytes.\n", size);
//	}
//	return 0;
//}

//int main()
//{
//	int n;
//	FILE* pFile;
//	char buffer[27];
//
//	pFile = fopen("myfile.txt", "w+");
//	for (n = 'A'; n <= 'Z'; n++)
//		fputc(n, pFile);
//	rewind(pFile);
//
//	fread(buffer, 1, 26, pFile);
//	fclose(pFile);
//
//	buffer[26] = '\0';
//	printf(buffer);
//	return 0;
//}

#include<stdlib.h>

//int main()
//{
//	int c; // 注意：int，⾮char，要求处理EOF
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp) {
//		perror("File opening failed");
//		return EXIT_FAILURE;
//	}
//	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
//	{
//		putchar(c);
//	}
//	//判断是什么原因结束的
//	if (ferror(fp))
//		puts("I/O error when reading");
//	else if (feof(fp))
//		puts("End of file reached successfully");
//	fclose(fp);
//}


//enum { SIZE = 5 };
//int main()
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb"); // 必须⽤⼆进制模式
//	fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
//	fclose(fp);
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE) {
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n)
//			printf("%f ", b[n]);
//		putchar('\n');
//	}
//	else { // error handling
//		if (feof(fp))
//			printf("Error reading test.bin: unexpected end of file\n");
//		else if (ferror(fp)) {
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	fputs("abcdef", pf);//先将代码放在输出缓冲区
//	printf("睡眠10秒-已经写数据了，打开test.txt⽂件，发现⽂件没有内容\n");
//
//	Sleep(10000);
//
//	printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
//
//	printf("再睡眠10秒-此时，再次打开test.txt⽂件，⽂件有内容了\n");
//	Sleep(10000);
//
//	fclose(pf);
//	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}